#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
数据库配置设置脚本
帮助用户快速配置数据库连接信息
"""

import os
import sys

def create_env_file(db_config):
    """创建环境配置文件"""
    env_content = f"""# 环境配置文件 - 自动生成
# 修改时间: {os.popen('date').read().strip()}

# Flask 环境配置
FLASK_ENV=development
SECRET_KEY=your-super-secret-key-here-change-this-in-production

# 服务器配置
HOST=0.0.0.0
PORT=5000

# 数据库配置 - MySQL
MYSQL_HOST={db_config['host']}
MYSQL_PORT={db_config['port']}
MYSQL_USER={db_config['user']}
MYSQL_PASSWORD={db_config['password']}
MYSQL_DATABASE={db_config['database']}

# 数据库连接池配置
DB_POOL_SIZE=10
DB_POOL_TIMEOUT=20
DB_POOL_RECYCLE=3600
DB_MAX_OVERFLOW=0
DB_ECHO=false

# JWT配置
JWT_SECRET_KEY=jwt-secret-key-change-this-in-production
JWT_EXPIRES_HOURS=168

# 文件上传配置
UPLOAD_FOLDER=uploads
MAX_CONTENT_LENGTH=16777216

# 日志配置
LOG_LEVEL=INFO
LOG_FILE=logs/app.log

# 微信配置（可选）
WECHAT_APPID=your-wechat-appid
WECHAT_SECRET=your-wechat-secret

# 跨域配置
CORS_ORIGINS=http://localhost:8080,http://127.0.0.1:8080

# 微信支付配置（可选）
WECHAT_APP_ID=your-wechat-app-id
WECHAT_MCH_ID=your-merchant-id
WECHAT_PAY_KEY=your-api-key
WECHAT_NOTIFY_URL=http://your-domain.com/api/v1/payments/wechat/notify

# Redis配置（可选）
REDIS_URL=redis://localhost:6379/0

# 安全配置
WTF_CSRF_SECRET_KEY=csrf-secret-key-change-in-production
SEND_FILE_MAX_AGE_DEFAULT=31536000

# 开发模式配置
DEBUG=True
TESTING=False
"""
    
    # 写入.env文件
    with open('.env', 'w', encoding='utf-8') as f:
        f.write(env_content)
    
    print("✅ .env 配置文件已创建")

def get_database_config():
    """获取数据库配置信息"""
    print("🔧 数据库配置设置")
    print("=" * 50)
    
    # 读取用户输入
    config = {}
    
    print("请输入数据库连接信息：")
    
    config['host'] = input("数据库地址 (默认: localhost): ").strip() or 'localhost'
    config['port'] = input("端口号 (默认: 3306): ").strip() or '3306'
    config['user'] = input("用户名: ").strip()
    config['password'] = input("密码: ").strip()
    config['database'] = input("数据库名: ").strip()
    
    # 验证必填项
    if not config['user']:
        print("❌ 用户名不能为空")
        return None
    
    if not config['database']:
        print("❌ 数据库名不能为空")
        return None
    
    return config

def test_database_connection(config):
    """测试数据库连接"""
    print("\\n🔍 测试数据库连接...")
    
    try:
        import pymysql
        
        connection = pymysql.connect(
            host=config['host'],
            port=int(config['port']),
            user=config['user'],
            password=config['password'],
            database=config['database'],
            charset='utf8mb4'
        )
        
        with connection.cursor() as cursor:
            cursor.execute("SELECT 1")
            result = cursor.fetchone()
        
        connection.close()
        print("✅ 数据库连接测试成功")
        return True
        
    except ImportError:
        print("⚠️ PyMySQL 未安装，跳过连接测试")
        print("请运行: pip install pymysql")
        return True
        
    except Exception as e:
        print(f"❌ 数据库连接测试失败: {e}")
        print("请检查：")
        print("1. 数据库服务是否启动")
        print("2. 连接信息是否正确")
        print("3. 用户是否有访问权限")
        return False

def show_current_config():
    """显示当前配置"""
    if os.path.exists('.env'):
        print("\\n📋 当前数据库配置：")
        with open('.env', 'r', encoding='utf-8') as f:
            lines = f.readlines()
            
        for line in lines:
            if line.startswith('MYSQL_'):
                print(f"  {line.strip()}")
    else:
        print("\\n⚠️ 未找到 .env 配置文件")

def main():
    """主函数"""
    print("🚀 体育场馆预约系统 - 数据库配置工具")
    print("=" * 60)
    
    # 显示当前配置
    show_current_config()
    
    print("\\n选择操作：")
    print("1. 新建数据库配置")
    print("2. 修改现有配置")
    print("3. 测试数据库连接")
    print("4. 退出")
    
    choice = input("\\n请选择 (1-4): ").strip()
    
    if choice == '1' or choice == '2':
        # 获取数据库配置
        config = get_database_config()
        if not config:
            print("❌ 配置获取失败")
            return
        
        # 测试连接
        if test_database_connection(config):
            # 创建配置文件
            create_env_file(config)
            print("\\n🎉 数据库配置完成！")
            print("\\n下一步:")
            print("1. 运行 python run.py 启动服务")
            print("2. 访问 http://localhost:5000/health 检查服务状态")
        else:
            print("\\n❌ 由于连接测试失败，未保存配置")
            save_anyway = input("是否仍要保存配置？(y/N): ").lower()
            if save_anyway == 'y':
                create_env_file(config)
                print("✅ 配置已保存，请稍后检查数据库连接")
    
    elif choice == '3':
        # 测试现有配置
        if not os.path.exists('.env'):
            print("❌ 未找到 .env 配置文件，请先创建配置")
            return
        
        # 读取现有配置
        config = {}
        with open('.env', 'r', encoding='utf-8') as f:
            lines = f.readlines()
        
        for line in lines:
            if line.startswith('MYSQL_HOST='):
                config['host'] = line.split('=', 1)[1].strip()
            elif line.startswith('MYSQL_PORT='):
                config['port'] = line.split('=', 1)[1].strip()
            elif line.startswith('MYSQL_USER='):
                config['user'] = line.split('=', 1)[1].strip()
            elif line.startswith('MYSQL_PASSWORD='):
                config['password'] = line.split('=', 1)[1].strip()
            elif line.startswith('MYSQL_DATABASE='):
                config['database'] = line.split('=', 1)[1].strip()
        
        test_database_connection(config)
    
    elif choice == '4':
        print("👋 退出配置工具")
    
    else:
        print("❌ 无效选择")

if __name__ == '__main__':
    main() 